<?php

namespace App\Console\Commands;


use Illuminate\Console\GeneratorCommand;
use Illuminate\Support\Facades\Artisan;

// 重点

class base extends GeneratorCommand
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $name = 'make:base'; // 重点需要注意的地方，之前是$signature这里记得改下 改成$name

    /**
     * 控制台命令说明.
     *【创建新的服务类】
     * @var string
     */
    protected $description ='这是自定义控制器:控制台';

    /**
     * 生成类的类型
     *
     * @var string
     */


    protected $type = 'Controller';

    private $name_ = null;
    /**
     * Execute the console command.
     *
     * @return int
     */

    /**
     * 获取生成器的存根文件
     *
     * @return string
     */

    protected function getStub()
    {
        return __DIR__ . '/Stubs/base.stub';
    }

    /**
     * 获取类的默认命名空间
     *
     * @param  string  $rootNamespace
     * @return string
     */

    protected function getDefaultNamespace($rootNamespace)
    {
        return $rootNamespace . '\Http\Controllers\V1';
    }

    public function handle()
    {
        $name = $this->getNameInput(); // 获取输入的名称
        $Name_ = $name;
        $this->set_names($Name_);
        $this->input->setArgument('name', $this->getNameInput().'Controller'); // 设置处理后的名称
        return parent::handle(); // 调用父类的handle方法执行生成文件的操作
    }

    public function set_names($name = null){
        if(empty($name))
            return $this->name_ = $this->getNameInput();
        return  $this->name_ = $name;
    }

    protected function replaceNamespace(&$stub, $name)
    {
        $_Name_ = $this->name_; // 获取输入的名称
        $stub = str_replace('_Name_', $_Name_, $stub); // 用自定义命名空间替换占位符

        return $this; // 返回类的实例，支持方法链式调用
    }

}
